package 面向对象初级.HomeWork;

public class MyInt {
    /**
     * 3、MyInt类
     * （1）声明一个MyInt类，
     * 包含一个int类型的value属性
     * 包含一个方法boolean isNatural()方法，用于判断value属性值是否是自然数。自然数是大于等于0的整数。
     * 包含一个方法int approximateNumberCount()方法，用于返回value属性值的约数个数。在[1, value]
     * 之间可以把value整除的整数都是value的约数。
     * 包含一个方法boolean isPrimeNumber()方法，用于判断value属性值是否是素数。如果value值在[1, value]
     * 之间只有1和value本身两个约数，并且value是大于1的自然数，那么value就是素数。
     * 包含一个方法int[] getAllPrimeNumber()方法，用于返回value属性值的所有约数。返回[1, value]
     * 之间可以把value整除的所有整数。
     * （2）测试类的main中调用测试
     */
    // 定义MyInt类
        private int value;

        public MyInt(int value) {
            this.value = value;
        }

        // 判断是否是自然数
        public boolean isNatural() {
            return value >= 0;
        }

        // 返回约数个数
        public int approximateNumberCount() {
            int count = 0;
            for (int i = 1; i <= value; i++) {
                if (value % i == 0) {
                    count++;
                }
            }
            return count;
        }

        // 判断是否是素数
        public boolean isPrimeNumber() {
            if (value <= 1) {
                return false;
            }
            if (value == 2) {
                return true;
            }
            for (int i = 2; i <= Math.sqrt(value); i++) {
                if (value % i == 0) {
                    return false;
                }
            }
            return true;
        }

        // 返回所有约数
        public int[] getAllPrimeNumber() {
            int count = approximateNumberCount();
            int[] primes = new int[count];
            int index = 0;
            for (int i = 1; i <= value; i++) {
                if (value % i == 0) {
                    primes[index++] = i;
                }
            }
            return primes;
        }
    }
